import axios from "axios"
// import ReactDOM from 'react-dom/client'

import { message } from 'antd'

export const baseURL = 'http://microopenai:8888/admin'

// 当前正在请求的数量
let requestCount = 0

// 显示loading
function showLoading() {
    console.log('showLoading', requestCount === 0)
    requestCount++
    if (requestCount === 1) {
        console.log('进来了')
        var dom = document.createElement('div')
        dom.textContent = '数据获取中...'
        dom.setAttribute('id', 'loading')
        document.body.appendChild(dom)
        // ReactDOM.render(<Spin tip="加载中..." size="large" />, dom)
    }
}
// 隐藏loading
function hideLoading() {
    console.log('隐藏', requestCount)
    requestCount > 0 && requestCount--
    console.log(requestCount, requestCount === 0)

    if (requestCount === 0) {
        console.log('移除', document.getElementById('loading'))
        const loadingEl = document.getElementById('loading')
        setTimeout(() => {
            loadingEl && document.body.removeChild(loadingEl)
        }, 2000);
    }
}

class HttpRequest {

    // 实例对象
    http = null

    constructor() {
        this.init()
    }

    init() {
        this.http = axios.create({
            baseURL: baseURL,
            timeout: 10000,
            headers: { 'Content-Type': 'application/json' },
            // `url` 是用于请求的服务器 URL
            // url: '/Business/Spus?SinceId=-1',

            // `method` 是创建请求时使用的方法
            // method: 'get', // 默认是 get
        })

        // 添加请求拦截器
        this.http.interceptors.request.use(function (config) {
            // showLoading()
            console.log('请求前', config)
            // 在发送请求之前做些什么
            // uniapp加载api
            // uni.showLoading()
            return config;
        }, function (error) {
            // 对请求错误做些什么
            return Promise.reject(error);
        });

        // 添加响应拦截器
        this.http.interceptors.response.use(function (response) {
            console.log('响应前', response)
            // uniapp隐藏加载api
            // uni.hideLoading()
            // hideLoading()

            const data = response.data
            if (response.status === 200) {
                message.success(response.data.message || '数据获取成功')
            }
            // 对响应数据做点什么
            // if (data.Data) {
            //     const res = data.Data
            //     // 自定义返回值
            //     return res;
            // } else if (!data.Status) {
            //     // 返回状态错误时执行
            //     console.error(data.Message)
            //     // uni.showToast({
            //     //     title: data.Message,
            //     //     icon: 'none'
            //     // })
            //     return Promise.reject(data.Message);
            // }

            // 默认返回值
            return data;
        }, function (error) {
            // 对响应错误做点什么
            console.log('对响应错误做点什么')
            // console.log(error.response)
            // console.log(error.request)
            //  uni.hideLoading()
            // hideLoading()

            const response = error.response
            console.log(response)
            if (response.status === 401) {
                // 跳转到登录页,待补充
                //  uni.showToast({
                //      title: data.message,
                //      icon: 'none'
                //  })
            } else if (response.status === 403) {
                message.error(response.data.message)
            }
            console.error(error)

            return Promise.reject(error);
        });
    }

    // 执行 GET 请求
    get(url, params) {
        return new Promise((resolve, reject) => {
            console.log('-------------------------------------')
            console.log(url, params)
            this.http.get(url, {
                params: params
            }).then(res => {
                console.log(res)
                resolve(res)
            }).catch(err => {
                reject(err)
            })
        })
    }

    // 执行 POST 请求
    post(url, params) {
        return new Promise((resolve, reject) => {
            this.http.post(url, params).then(res => {
                console.log(res)
                resolve(res)
            }).catch(err => {
                reject(err)
            })
        })
    }

    // 执行PUT 请求
    put(url, params) {
        return new Promise((resolve, reject) => {
            this.http.put(url, params).then(res => {
                console.log(res)
                resolve(res)
            }).catch(err => {
                reject(err)
            })
        })
    }

    // 执行 DELETE 请求
    delete(url, params) {
        return new Promise((resolve, reject) => {
            this.http.delete(url, {
                params: params
            }).then(res => {
                console.log(res)
                resolve(res)
            }).catch(err => {
                reject(err)
            })
        })
    }

    // 执行多个并发请求
    all(requestArray) {
        return new Promise((resolve, reject) => {
            axios.all(requestArray).then(axios.spread(function () {
                // 所有请求现在都执行完成
                console.log('所有并发请求成功')
                // 返回所有数据
                resolve(arguments)
            })).catch(err => {
                console.log('并发请求存在错误')
                console.error(err)
                reject(err)
            }).finally(() => {

            })
        })
    }
}

export default new HttpRequest()